[bucketId].tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { useParams } from 'common'
  2. import { AnalyticsBucket as AnalyticsBucketIcon } from 'icons'
  3. import { useRouter } from 'next/router'
  4. import { useEffect } from 'react'
  5. import { toast } from 'sonner'
  6. import { AnalyticBucketDetails } from '@/components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails'
  7. import { useSelectedAnalyticsBucket } from '@/components/interfaces/Storage/AnalyticsBuckets/useSelectedAnalyticsBucket'
  8. import { BUCKET_TYPES } from '@/components/interfaces/Storage/Storage.constants'
  9. import DefaultLayout from '@/components/layouts/DefaultLayout'
  10. import { PageLayout } from '@/components/layouts/PageLayout/PageLayout'
  11. import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout'
  12. import { DocsButton } from '@/components/ui/DocsButton'
  13. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  14. import type { NextPageWithLayout } from '@/types'
  15. const AnalyticsBucketPage: NextPageWithLayout = () => {
  16. const config = BUCKET_TYPES.analytics
  17. const router = useRouter()
  18. const { ref, bucketId } = useParams()
  19. const { data: project } = useSelectedProjectQuery()
  20. const { data: bucket, isSuccess } = useSelectedAnalyticsBucket()
  21. useEffect(() => {
  22. if (isSuccess && !bucket) {
  23. toast.info(`Bucket "${bucketId}" does not exist in your project`)
  24. router.push(`/project/${ref}/storage/analytics`)
  25. }
  26. // eslint-disable-next-line react-hooks/exhaustive-deps
  27. }, [isSuccess])
  28. return (
  29. <PageLayout
  30. title={bucketId}
  31. icon={
  32. <div className="shrink-0 w-10 h-10 relative bg-surface-100 border rounded-md flex items-center justify-center">
  33. <AnalyticsBucketIcon size={20} className="text-foreground-light" />
  34. </div>
  35. }
  36. breadcrumbs={[
  37. {
  38. label: 'Analytics',
  39. href: `/project/${project?.ref}/storage/analytics`,
  40. },
  41. {
  42. label: 'Buckets',
  43. },
  44. ]}
  45. secondaryActions={config?.docsUrl ? [<DocsButton key="docs" href={config.docsUrl} />] : []}
  46. >
  47. <AnalyticBucketDetails />
  48. </PageLayout>
  49. )
  50. }
  51. AnalyticsBucketPage.getLayout = (page) => (
  52. <DefaultLayout>
  53. <StorageLayout title="Buckets">{page}</StorageLayout>
  54. </DefaultLayout>
  55. )
  56. export default AnalyticsBucketPage